package query.ddl

import ast.statement.ddl.SqlCreateIndex
import ast.expr.SqlIdentifierExpr
import database.DB
import query.ReviseQuery
import util.toSqlString
import java.sql.Connection

class CreateIndex(
    var db: DB = DB.MYSQL,
    override var conn: Connection? = null,
    override var isTransaction: Boolean = false
) : ReviseQuery() {
    constructor(db: DB) : this(db, null, false)

    private var sqlCreateIndex = SqlCreateIndex()

    infix fun create(indexName: String): CreateIndex {
        sqlCreateIndex.name = SqlIdentifierExpr(indexName)
        return this
    }

    infix fun createUnique(indexName: String): CreateIndex {
        sqlCreateIndex.name = SqlIdentifierExpr(indexName)
        sqlCreateIndex.type = "UNIQUE"
        return this
    }

    infix fun on(table: String): CreateIndex {
        sqlCreateIndex.table = SqlIdentifierExpr(table)
        return this
    }

    infix fun column(column: String): CreateIndex {
        sqlCreateIndex.columns.add(SqlIdentifierExpr(column))
        return this
    }

    infix fun column(columns: List<String>): CreateIndex {
        columns.forEach {
            sqlCreateIndex.columns.add(SqlIdentifierExpr(it))
        }
        return this
    }

    override fun sql() = toSqlString(sqlCreateIndex, db)
}